package com.ruoyi.system.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;

import java.time.LocalDateTime;

/**
 * 消息推送任务实体类
 * 用于管理消息推送任务的基本信息，包括任务状态、内容、接收者等
 * 
 * @author ruoyi
 * @since 2024-01-01
 */
@Data
@TableName("t_msg_push_task")
public class MsgPushTaskDO {

    /**
     * 主键ID
     */
    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * 任务编号
     * 系统自动生成，格式：TS + 日期 + 随机数，如：TS20240101123456
     */
    @TableField("task_no")
    private String taskNo;

    /**
     * 模板ID
     * 关联消息模板表，用于获取模板配置信息
     */
    @TableField("template_id")
    private Long templateId;

    /**
     * 项目ID
     * 关联项目表，标识消息所属的项目
     */
    @TableField("project_id")
    private Long projectId;

    /**
     * 项目名称
     * 冗余字段，便于查询和展示
     */
    @TableField("project_name")
    private String projectName;

    /**
     * 消息类型
     * 1-设计资料,2-主材清单,3-合同签署,4-验收信息,5-财务支付,6-阶段验收,7-需求变更,99-其他
     * @see com.ruoyi.system.enums.MsgTypeEnum
     */
    private Integer type;
    
    /**
     * 消息标题
     * 基于模板渲染后的最终标题
     */
    private String title;

    /**
     * 渲染后的消息内容
     * 基于模板和变量渲染后的最终内容
     */
    @TableField("content_rendered")
    private String contentRendered;

    /**
     * 内容变量
     * JSON格式，存储用于渲染的变量数据
     */
    @TableField("content_vars")
    private String contentVars;

    /**
     * 关联业务ID
     * 设计资料-设计方案ID，合同签署-合同ID，验收信息-事项ID，阶段验收-阶段ID，主材清单-物料清单ID
     */
    @TableField("business_id")
    private String businessId;

    /**
     * 关联业务编号
     */
    @TableField("business_no")
    private String businessNo;

    /**
     * 关联业务名称
     */
    @TableField("business_name")
    private String businessName;

    /**
     * 是否需要签名
     * 0-不需要签名, 1-需要签名
     * 继承自模板配置
     */
    @TableField("need_signature")
    private Integer needSignature;

    /**
     * 过期时间
     * 基于模板的expireDays计算得出
     */
    @TableField("expire_at")
    private LocalDateTime expireAt;

    /**
     * 定时发送时间
     * 用于定时推送功能，为空表示立即发送
     */
    @TableField("schedule_time")
    private LocalDateTime scheduleTime;

    /**
     * 创建人
     */
    @TableField("created_by")
    private String createdBy;

    /**
     * 发送人
     * 执行推送操作的用户
     */
    @TableField("sent_by")
    private String sentBy;

    /**
     * 发送时间
     * 任务实际推送的时间
     */
    @TableField("sent_time")
    private LocalDateTime sentTime;

    /**
     * 备注
     * 任务相关的备注信息
     */
    private String remark;

    /**
     * 创建时间
     */
    @TableField("create_time")
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @TableField("update_time")
    private LocalDateTime updateTime;

    /**
     * 逻辑删除标识
     * 0-存在, 1-删除
     */
    @TableField("is_deleted")
    @TableLogic
    private Integer isDeleted;
}
